package zw_301_400.zw_326_3的幂;

public class Solution {


    public static void main(String[] args) {
        int n = 81;
        boolean b = isPowerOfThree(n);
        System.out.println(b);
    }

    /**
     * 方法二：判断是否为最大 3 的幂的约数
     * 在题目给定的 32 位有符号整数的范围内，最大的 3 的幂为 3^{19} = 11622614673。我们只需要判断 n 是否是 3^{19}的约数即可。
     * 与方法一不同的是，这里需要特殊判断 n 是负数或 0 的情况。
     *
     * @param n
     * @return
     */
    public static boolean isPowerOfThree(int n) {
        return n > 0 && 1162261467 % n == 0;
    }


    /**
     * 方法一：直接不断除3，判断然后余数是否为0
     * 时间复杂度：O(logn)。当 n 是 3 的幂时，需要除以 3 的次数为log3(n)=O(logn)；当 n 不是 3 的幂时，需要除以 3 的次数小于该值。
     * 空间复杂度：O(1)。
     *
     * @param n
     * @return
     */
//    public static boolean isPowerOfThree(int n) {
//        while (n != 0 && n % 3 == 0) {
//            n /= 3;
//        }
//        return n == 1;
//
////        if (n <= 0) return false;
////        if (n == 1) return true;
////        while (n > 1) {
////            if (n % 3 != 0) {
////                return false;
////            }
////            n /= 3;
////        }
////        return true;
//    }




}
